import axios from 'axios'
import {Message} from "element-ui";
import router from '../router' // 导入路由文件 找到对应路由

// 请求拦截器
axios.interceptors.request.use(config=>{
    // 获取token storage
    // 如果存在token ,请求携带这个token
    if(window.sessionStorage.getItem('tokenStr')){
        config.headers['Authorization'] = window.sessionStorage.getItem('tokenStr');
    }
    return config;
},error => {
    console.log(error);
})

//响应拦截器interceptors response 方便碰到响应失败进行统一的处理
axios.interceptors.response.use(success => {
    // 业务逻辑错误
    if(success.status && success.status == 200) {
        if(success.data.code == 500 || success.data.code == 401 || success.data.code == 403){
            Message.error({message: success.data.message});//业务逻辑错误给一个错误信息即可
            return; // 返回空
        }
        if(success.data.message) {
            Message.success({message: success.data.message});
        }
    }
    return success.data; // 响应成功返回数据 返回json对象
},error => { // 后端接口都没调到的情况
    if(error.response.code == 504 || error.response.code == 404) {
        // error和success区别 success通过状态码,data就是json对象. error没调到接口 直接就是响应码
        Message.error({message: '服务器被吃了 OMG !'});
    }else if(error.response.code == 403) {
        Message.error({message: '权限不足,请联系管理员'});
    }else if(error.response.code == 401) {
        Message.error({message: '尚未登录,请登录!!'});
        router.replace('/');    // 替换
    }else{
        if(error.response.data.message){// 判断响应里面有没有信息
            Message.error({message: error.response.data.message});
        }else{
            Message.error({message: '未知错误! '});
        }
    }
    return; // 错误的话直接返回空 
});

let base = '';

// 传送json格式的post请求  post 请求封装
export const postRequest = (url, params) => {
    return axios({
        method: 'post',
        url: `${base}${url}`, // 如果项目完结 在ip地址端口号和请求路径中间加一个前置的路径！
        data: params
    })
}

// 传统json的put请求
export const putRequest=(url,params)=>{
    return axios({
        method: 'put',
        url: `${base}${url}`,
        data:params
    })
}

// 传统json的get请求
export const getRequest=(url,params)=>{
    return axios({
        method: 'get',
        url: `${base}${url}`,
        data:params
    })
}

// 传统json的delete请求
export const deleteRequest=(url,params)=>{
    return axios({
        method: 'delete',
        url: `${base}${url}`,
        data:params
    })
}